简体   繁体   English

Django M2M关系问题

[英]Django m2m relationship problems

i'm not expert in django, so sorry if this question seems stupid. 我不是django方面的专家,如果这个问题看起来很愚蠢,对不起。 I'm trying to create a simple register page in django and i'm getting some problems with many-to-many relationship. 我正在尝试在Django中创建一个简单的注册页面,并且多对多关系出现了一些问题。

My models.py 我的models.py

class Dog(models.Model):
    name = models.CharField(max_length=100)
    reg_num = models.CharField(max_length=100)
    owner = models.ManyToManyField('Owner', db_column='owner')

    class Meta:
        managed = False
        db_table = 'dog'

    def __str__(self):
        return self.name


class Owner(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

I'm using class based views from django: 我正在使用来自Django的基于类的视图:

class DogForm(ModelForm):
    class Meta:
        model = Controle
        fields = ['name', 'reg_num','owner']

class DogMixin(object):
    model = Dog
    form_class = DogForm
    template_name = 'generic_form.html'
    success_url = reverse_lazy('dog_list')


    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.user = self.request.user
        obj.save()        
        return HttpResponseRedirect(self.success_url)


class DogCreate(DogMixin, CreateView):
    pass

class DogUpdate(DogMixin, UpdateView):
    pass

class DogDelete(DogMixin, DeleteView):
    template_name = 'generic_delete.html'

And finally the html file: 最后是html文件:

            <tbody>
            {% for dog in object_list%}
            <tr>
                <td> {{dog.name}}</td>
                <td> {{dog.reg_num}}</td>
                <td> {{dog.owner}}
            </tr>
            {% endfor %}
    </tbody>

When i create the dog instance, i select the owner in a box. 创建狗实例时,请在框中选择所有者。 The table is ok, except the "dog.owner" it appears as None. 该表还可以,但“ dog.owner”除外,它显示为“无”。 What am i missing? 我想念什么?

You're assigning dog.user in your view, but the field is called owner . 您正在视图中分配dog.user ,但该字段称为owner

However, I don't think that you want a many-to-many field here. 但是,我认为您在这里不需要多对多领域。 That would imply that a dog has many owners, and would also mean that you would need to iterate over dog.owner.all in your template. 这意味着狗有很多所有者,也意味着您需要遍历模板中的dog.owner.all I think instead you want a simple ForeignKey, in which case you can do dog.owner = self.request.user and then output it as you are already doing. 我认为相反,您需要一个简单的ForeignKey,在这种情况下,您可以执行dog.owner = self.request.user ,然后将其输出即可。

Edit If you're sure, then you need to add the current user to the list of owners: dog.owner.add(self.request.user) . 编辑如果确定,则需要当前用户添加到所有者列表dog.owner.add(self.request.user) And, as I say, in your display template you can't just show "the owner" because there are many: you need to iterate over dog.owner.all and show the name of each one. 而且,正如我所说,在您的显示模板中您不能仅显示“所有者”,因为有很多所有者:您需要遍历 dog.owner.all并显示每个名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM