簡體   English   中英

Django ModelForm - 使用外鍵創建實例

[英]Django ModelForm - Create instance with foreign key

我想知道當它包含所需的 FK 時,使用 django 模型表單創建模型實例的正確方法是什么? 我認為這可能與exclude類屬性有關,但在視圖中我試圖在保存之前覆蓋它。

模型:

 class Profile(models.Model):
    client = models.OneToOneField('auth.User')
    first_name = models.TextField(blank=True,)
...

形式:

class ProfileForm(floppyforms.ModelForm):
    class Meta:
        exclude = ('client',)
        model = Profile

        widgets = {
            'first_name': floppyforms.TextInput(attrs={'placeholder': 'First Name'}),
...

看法:

def post(self, request):
    form = ProfileForm(request.POST)
    if form.is_valid():
        form.save(commit=False)
        form.client = User.objects.create(username=request.POST['email'],)
        form.save()
        return redirect('/success')
    return redirect('/error')

錯誤:

django.db.models.fields.related.RelatedObjectDoesNotExist: Profile has no client.

查看管理員,我可以看到用戶已經創建。 在此處輸入圖片說明

干杯

您的 views.py 中有錯誤。 它應該是:

def post(self, request):
    form = ProfileForm(request.POST)
    if form.is_valid():
        new_profile = form.save(commit=False)
        new_profile.client = User.objects.create(username=request.POST['email'],)
        new_profile.save()
        return redirect('/success')
    return redirect('/error')

您不應該將客戶端分配給您的表單,而是分配給內存中的實例new_profile ,然后調用new_profile.save()new_profile保存到數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM