我想显示可能的选择,从ManyToManyField(我有在家模型)在业主的形式。我有业主<;--Many2Many--gt;家,拥有定制类业主。在家里,它是开箱即用的,我不知道如何让它在业主那里工作。
我正在使用Django2.2.4和Bootstrap4和Postgresql。我基于django bookshelf项目(也就是django和Bootstrap4)开始了我的项目。我不使用任何渲染。django bookshelf项目中的注释提到了How to add bootstrap class to Django CreateView form fields in the template?,所以如果它符合表单,我就坚持使用它。你知道吗
一般来说,我对Python(Django也是)和web技术相当陌生。我在谷歌上搜索了十几个不同的问题/答案,但我找不到任何关于什么是什么以及如何在现实生活中使用它的好解释。它们中的大多数最终都有了基本的用法。你知道吗
我自己做了一些实验,但到目前为止没有成功。。。你知道吗
这是代码
我有两个模型-房子/型号.py和所有者/型号.py
家庭/型号.py:
class Homes(models.Model):
id = models.AutoField(primary_key=True)
# other fields
some_owners = models.ManyToManyField(Owners, through='HomesOwners', through_fields=('id_home', 'id_owner'), related_name='some_owners')
# end of fields, some other code in the class like "class Meta" etc.
class HomesOwners(models.Model):
id = models.AutoField(primary_key=True)
id_home = models.ForeignKey(Homes, models.DO_NOTHING, db_column='id_home')
id_owner = models.ForeignKey('owners.Owners', models.DO_NOTHING, db_column='id_owner')
所有者/型号.py没有什么特别的,没有从我家进口的/型号.py等等
以及我的表格:
家庭/表单.py:
class HomesForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(HomesForm, self).__init__(*args, **kwargs)
self.fields['some_field_from_homes_model'].widget.attrs = {'class': 'form-control '}
#
# --> no need self.fields for M2M, Django does the work
#
# but I tried also and have a --> Question 2
# self.fields["some_owners"].widget = forms.widgets.CheckboxSelectMultiple()
# self.fields["some_owners"].queryset = HomesOwners.objects.all()
没有任何代码自选字段“对于M2M字段,Django能够为我生成所有者列表。你知道吗
问题1
我想在我的业主表格中获得房屋的列表。你知道吗
我不知道要补充什么。我想我不能补充
# Owners/models.py
some_homes = models.ManyToManyField(Homes, through='HomesOwners', through_fields=('id_home', 'id_owner'), related_name='some_homes')
因为循环进口,对吗?你知道吗
如何使用自我保护领域? 我需要在代码中添加什么?你知道吗
问题2
当我加上
# Homes/forms.py
self.fields["some_owners"].widget = forms.widgets.CheckboxSelectMultiple()
self.fields["some_owners"].queryset = HomesOwners.objects.all()
我得到了
<!-- html page -->
HomesOwners object (1)
HomesOwners object (2)
<!-- and so on... -->
我怎么能只列出所有者? 如何过滤/排序它们,使它们首先显示为未连接到任何家庭?你知道吗
问题3
class HomesOwners(models.Model):
id = models.AutoField(primary_key=True)
id_home = models.ForeignKey(Homes, models.DO_NOTHING, db_column='id_home')
id_owner = models.ForeignKey('owners.Owners', models.DO_NOTHING, db_column='id_owner')
def __str__(self):
return pass #return something
我脑子都想不起来了。这个类连接家庭和业主。当我想到房子时,我想归还拥有者,反之亦然。所以它应该根据我们使用的对象(家或所有者)返回不同的东西。我想这和我的第二个问题有关:
HomesOwners object (1)
还有。。。你知道吗
在主页.html我是这样使用M2M的:
{% for owner in homes.homesowners_set.all %}
{{ owner.id_owner.id }}
{% endfor %}
我想写一些类似我的所有者.html并列出住宅。这是连接到我的前一个问题,我想有完整的答案,如果可能的话。你知道吗
编辑
有了给我的答案,我就可以把家添加到OwnerUpdate视图中。我有这样的看法: 所有者/视图.py
# List View
class OwnersList(ListView):
model = Owners
# Detail View
class OwnersView(DetailView):
model = Owners
# Create View
class OwnersCreate(CreateView):
model = Owners
form_class = OwnersForm
# Setting returning URL
success_url = reverse_lazy('owners_list')
# Update View
class OwnersUpdate(UpdateView):
model = Owners
form_class = OwnersForm
success_url = reverse_lazy('owners_list')
# Delete View
class OwnersDelete(DeleteView):
model = Owners
success_url = reverse_lazy('owners_list')
我需要做什么改变才能在业主名单上显示他们拥有的房子? 在家庭详细视图中,我可以显示所有者。我想对Homes的DetailView和Homes的ListView做同样的操作。你知道吗
我真的不明白你的要求,
但如果我没弄错你的问题,
我假设您想将房屋列表(不是房屋所有者列表)添加到您的所有者表单中,对吗?你知道吗
您可以在表单中添加如下额外字段:
然后,由于它使用
CheckboxSelectMultiple
小部件,因此可以在html模板中迭代它,如下所示:您可能还需要为窗体创建自定义保存。你知道吗
对于你的问题3,它不是关于形式?
如果你想向房主展示,你已经做得很好了。
但是如果
homes
仅仅是一个对象,它就会工作。如果
homes
是一个查询集,则必须首先迭代它抱歉,如果我误解了您的问题,
也许你也可以提供你的
views.py
,这样我或其他人可以帮助你更具体相关问题 更多 >
编程相关推荐