如何在模板中更改ManyToManyField的视图?

时间:2019-06-15 15:36:58

标签: django

It's ugly

该怎么做才能看到该字段的正文?必须有一个Size对象的值,但不能是“ Size object(id)”

我有模特:

from django.db import models

class Good(models.Model):
    Name = models.CharField(max_length = 150)
    Size = models.ManyToManyField('Size')

    def _str_(self):
        return self.Name

class Size(models.Model):
    size = models.CharField(max_length = 150)

    def _str_(self):
        return self.size

这是我的表格。py

class GoodGet(forms.ModelForm):
    class Meta:
        model = Good_Get
        Size = forms.ModelChoiceField(queryset = Good.objects.all())
        fields = '__all__'

    def __init__(self, *args, good_id1=None, **kwargs):
        super(forms.ModelForm, self).__init__(*args, **kwargs)
        if good_id1 is not None:
            obj = Good.objects.filter(id = good_id1)
            for good in obj:
                good_sizes = good.Size.all()
            self.fields['Size'].queryset = good_sizes

因此,我希望用户从Good的尺寸列表中选择尺寸,但是他看不到自己选择的尺寸。 我想我需要对数据库做些事情,不是吗?

1 个答案:

答案 0 :(得分:2)

您应该在__str__ [Python-doc]中使用两个连续的下划线,而不要使用 _str_ ,例如:

class Good(models.Model):
    Name = models.CharField(max_length=150)
    Size = models.ManyToManyField('Size')

    def __str__(self):
        return self.Name

class Size(models.Model):
    size = models.CharField(max_length=150)

    def __str__(self):
        return self.size
正如PEP-8 documentation所说,

魔术对象”具有两个连续的前划线和后划线:

  

__double_leading_and_trailing_underscore__:位于用户控制的名称空间中的“魔术”对象或属性。例如。 __init____import____file__。请勿发明此类名称;只能按记录使用它们。