Django - 如何替换嵌套在列表列表中的模型中的值

时间:2015-06-09 05:43:40

标签: django django-models

我有两种模式:

class Document (models.Model):
    dnom = JSONField(blank=True, null=True)
    dphoto = models.ImageField(upload_to='profile_document', blank=False)
    ddate_ajout = models.CharField(max_length=128, unique=False)


class Attacher (models.Model):
    name = models.CharField(max_length=128, unique=True)
    pieces_jointes = JSONField(blank=True, null=True)
    essai = JSONField(blank=True, null=True)

和两个相关的表格:

class AttacherForm(forms.ModelForm):
    name = forms.CharField(max_length=128, help_text="Please enter the name.")
    pieces_jointes = forms.MultipleChoiceField(choices=[], widget=forms.CheckboxSelectMultiple)

    def __init__(self, *args, **kwargs):
        super(AttacherForm, self).__init__(*args, **kwargs)
        self.fields['pieces_jointes'].choices = [(document.dnom, document.dnom) for document in Document.objects.all()]

    class Meta:
        # Provide an association between the ModelForm and a model
        model = Attacher
        fields = ('name','pieces_jointes')

class DocumentForm(forms.ModelForm):
    dnom = forms.CharField(max_length=128, help_text="Please enter the  name.")
    dphoto = forms.FileField()
    ddate_ajout = forms.CharField(max_length=128, help_text="Please enter the name name.")

        # Provide an association between the ModelForm and a model
        model = Document
        fields = ('dnom','dphoto','ddate_ajout')

因此,Attacher中的模型字段pieces_jointes是Document模型中包含的dnom列表(添加了MultipleChoiceField字段)。 我现在想在essai中有一个列表,该列表与piece_jointes匹配,但值为dphoto。

确实在我的模板中,我希望能够为每个Attacher名称显示pieces_jointes中包含的每个dnom以及相应的dphoto值。有人可以帮忙吗?我完全迷失了......非常感谢。

1 个答案:

答案 0 :(得分:0)

  1. 请用英文命名您的变量。这会伤害我的眼睛(我是一个土生土长的法语),但最重要的是它可以帮助任何阅读代码的人理解它。

  2. 正如评论中所指出的,您可能希望修改模型以使用ManyToMany关系。它旨在实现这一目标。

  3. 如果我理解,您计划使用pieces_jointesessai来存储2个相关dnomdphoto的列表。同样,这不是数据库的正确用法。你几乎不应该复制数据。对于记录,您可能在form中的字段没有直接链接到数据库中的字段。

  4. 使用模型,要获取与pieces_jointes对应的照片列表,请尝试以下操作:

    essai = Document.filter(dnom__in = pieces_jointes).values_list('dphoto')

  5. 我希望它有所帮助