【问题标题】:Django - Foreign Key Is Not Working PorperlyDjango - 外键工作不正常
【发布时间】:2020-07-20 15:56:04
【问题描述】:

所以基本上我的模板在一种形式中包含三列,它们分别工作。 如果我为联系人列和男性列提供输入,它将保存在我的数据库中。 但问题是外键不起作用。每当我在我的字段(forms.py)中包含外键变量时。表单不会在数据库中提交我的输入,但是当我从字段中删除它时 虽然它有效,但不会显示与联系人相关的任何值。 当外键变量的默认值为 True 时也可以使用。

结论外键与男性或女性模型无关。

请帮忙:

这是我的模型:

class Contact(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    age = models.IntegerField()
    number = models.IntegerField()
    type = models.CharField(max_length=50)
    gender = models.CharField(max_length=10)
    order_date = models.DateField(blank=True,null=True)
    issue_date = models.DateField(blank=True,null=True)
   

    def __str__(self):
        return self.name


class Male(models.Model):
    contact1 = models.ForeignKey(Contact,  on_delete=models.CASCADE,null=True)
    chest = models.CharField(max_length=30 , blank=True)
    neck = models.CharField(max_length=30 , blank=True)
    full_shoulder_width = models.CharField(max_length=30 , blank=True)
    right_sleeve = models.CharField(max_length=30 , blank=True)
    left_sleeve = models.CharField(max_length=30 , blank=True)
    bicep = models.CharField(max_length=30 , blank=True)
    def __str__(self):
        return self.chest

 


class Female(models.Model):
    contact2 = models.ForeignKey(Contact,  on_delete=models.CASCADE, null=True)
    fchest = models.CharField(max_length=30 , blank=True)
    fneck = models.CharField(max_length=30 , blank=True)
    fwaist = models.CharField(max_length=30 , blank=True)
    seat = models.CharField(max_length=30 , blank=True)
    shoulder_width = models.CharField(max_length=30 , blank=True)
    arm_length = models.CharField(max_length=30 , blank=True)

Views.py

def add(request):
    template_name = 'add.html'
    f_form = ''
    c_form = ''
    m_form = ''
    contact = ''
    contact = Contact.objects.all()  
    if request.method =='POST':
        c_form = commentForm(request.POST)
        m_form = maleForm(request.POST)
        f_form = femaleForm(request.POST)
        if c_form.is_valid() and (m_form.is_valid() or f_form.is_valid()):
                gender = c_form.cleaned_data.get('gender')
                username= c_form.cleaned_data.get('name')     
                c_form.save()
                if gender == 'female':
                        c_form.save()
                        f_form.save()
                        messages.success(request, f"Form Submitted: {username}")
                        return redirect("success")
                else:
                        c_form.save()
                        m_form.save()
                        messages.success(request, f"Form Submitted: {username}")
                        return redirect("success")     
        else:     
                    c_form = commentForm()
                    m_form = maleForm()   
                    f_form = femaleForm()
                    
       
              
    context = {
      
        'c_form' : c_form,
        'm_form' : m_form,
        'f_form' : f_form,
        'contact' : contact,

    }

    return render(request , template_name , context)
    

forms.py

from django import forms
from .models import Contact , Male ,Female



class commentForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = '__all__'
        


class maleForm(forms.ModelForm):
    class Meta:
        model = Male
        
        fields = ('chest' , 'neck' , 'full_shoulder_width' ,'right_sleeve' , 'left_sleeve' ,'bicep' )
        

class femaleForm(forms.ModelForm):
    class Meta:
        model = Female
        fields = ('fchest' , 'fneck' , 'fwaist' ,'seat' , 'shoulder_width' ,'arm_length' )

【问题讨论】:

  • 兄弟你需要在 c_form.save() 之后为 m_form 或 f_form 设置外键值
  • 谢谢。我得到了熟练的答案

标签: python python-3.x django


【解决方案1】:

您需要先保存您的评论表单并将其保存到一个变量中,以便您可以将其用作其他表单外键字段

 contact = c_form.save()
 if gender == 'female':
       female = f_form.save(commit=False)
       female.contact2 = contact
       female.save()
       messages.success(request, f"Form Submitted: 
 {username}")
       return redirect("success")
else:
        male = m_form.save(commit=False)
        male.contact1 = contact
        male.save()
        messages.success(request, f"Form Submitted: 
 {username}")
                    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2014-03-07
    相关资源
    最近更新 更多