返回

python-Django - 如何使用 Select 字段呈现 ModelForm,指定禁用选项?

发布时间:2022-07-28 01:32:21 345
# node.js

我有以下型号:

# Get or create a 'Not selected' category
def get_placeholder_categoy():
    category, _ = ListingCategories.objects.get_or_create(category='Not selected')
    return category


# Get default's category ID
def get_placeholder_category_id():
    return get_placeholder_categoy().id


class ListingCategories(models.Model):
    category = models.CharField(max_length=128, unique=True)
    
    def __str__(self):
        return f'{self.category}'


class Listing(models.Model):
    title = models.CharField(max_length=256)
    seller = models.ForeignKey(User, on_delete=models.CASCADE, related_name='listings')
    description = models.TextField(max_length=5120, blank=True)
    img_url = models.URLField(default='https://media.istockphoto.com/vectors/no-image-available-picture-coming-soon-missing-photo-image-vector-id1379257950?b=1&k=20&m=1379257950&s=170667a&w=0&h=RyBlzT5Jt2U87CNkopCku3Use3c_3bsKS3yj6InGx1I=')
    category = models.ForeignKey(ListingCategories, on_delete=models.CASCADE, default=get_placeholder_category_id, related_name='listings')
    creation_date = models.DateTimeField()
    base_price = models.DecimalField(max_digits=10, decimal_places=2, validators=[
        MinValueValidator(0.01),
        MaxValueValidator(99999999.99)
    ])

有了这些,我有以下表格:

class ListingForm(ModelForm):
    class Meta:
        model = Listing
        exclude = ['seller', 'creation_date']
        widgets = {
            'title': TextInput(attrs=base_html_classes),
            'description': Textarea(attrs=base_html_classes),
            'img_url': URLInput(attrs=base_html_classes),
            'category': Select(attrs=base_html_classes),
            'base_price': NumberInput(attrs=base_html_classes)
        }

我拥有的可用类别之一是“未选择”,因为我想允许如果在某个时候要删除某个类别,则可以将项目重新分配给该类别,但是,在呈现表单时,我将进行一些验证如果“未选择”类别与表单一起发送,则在视图功能上防止它被提交。

因此,我希望模板上的 HTML 表单将“禁用”属性分配给与该类别对应的选项,但是,我已经搜索了几天,但没有找到任何我能够理解的内容我可以尝试的地方。

理想情况下,我想要实现的另一件事是能够修改表单上呈现选项的顺序,以便无论模型中的主键如何,我都可以移动到顶部“未选择”。

我知道我可以只创建一个表单而不是模型表单,或者只是修改模板,以便我手动指定如何呈现表单本身,但我确实觉得在模型或模型上有一个简单的修复我还没有找到的模型形式。

提前致谢!

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像