[英]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.