我有以下课程:
class Account(models.Model):
instance = models.OneToOneField(Instance, blank=True, null=True)
class Instance(models.Model):
is_ready = models.BooleanField(default=False, verbose_name=_('Ready?'))
现在,帐户和实例之间的关系由帐户的ModelForm通过Account.instance
设置。
我希望能够通过实例上的ModelForm设置Account.instance
。那可能吗?
答案 0 :(得分:0)
一个ModelForm是:
一个帮助程序类,可让您从Django模型创建Form类。
一个想法是编写一个自定义模型字段来解决此问题。但是,根据Writing Custom Model Fields
的相关章节必须以某种方式将模型中的字段转换为适合现有数据库列类型的字段。
试图发现可用的postgreSQL列类型I found this page,但似乎无法提供解决方案。
另一方面,有一个old but updated SO post,它提供了一种解决方案,该解决方案实际上在HTML页面中呈现了两种形式,并且-通过这种方式-您可以将所有需要的字段收集为一种形式。
forms.py
class AccountForm(forms.ModelForm):
... Do stuff if necessary ...
class Meta:
model = Account
fields = ('the_fields', 'you_want')
class InstanceForm (forms.ModelForm):
... Do other stuff if necessary ...
class Meta:
model = Instance
fields = ('the_fields', 'you_want')
views.py
...
def register(request):
if request.method == 'POST':
account_form = AccountForm(request.POST)
instance_form = InstanceForm(request.POST)
if account_form.is_valid() and instance_form.is_valid():
account_form.save()
instance_form.save()
...
the_template.html
<form action="." method="post">
{% csrf_token %}
{{ account_form.as_p }}
{{ instance_form.as_p }}
<input type="submit" value="Submit">
</form>
这也是管理员class InlineModelAdmin的想法。
例如,在管理员中,Account
将成为Instance
的内联模型(这对django类来说是一个坏名字)。
admin.py:
from django.contrib import admin
class InstanceInline(admin.TabularInline):
model = Instance
class AccountAdmin(admin.ModelAdmin):
inlines = [
InstanceInline,
]