【问题标题】:how to save multiple model-forms (which are in 1:1) simultaneously in a view (Django)如何在视图中同时保存多个模型形式(1:1)(Django)
【发布时间】:2019-01-17 16:42:26
【问题描述】:

如何在一个视图中同时保存多个模型形式(律师和类别)(1:1)(Django)

class Lawyer(models.Model):
category = models.ForeignKey(Category, related_name='lawyer', on_delete=models.CASCADE)
profile = models.ForeignKey(Profile, related_name='profiles', on_delete=models.CASCADE)
name = models.CharField(max_length=100, db_index=True)
slug = models.SlugField(max_length=100, db_index=True)

class Category(models.Model):
profile = models.ForeignKey(Profile, related_name='profile', on_delete=models.CASCADE)
category_name = models.CharField(max_length=10, db_index=True,choices=CATEGORY_CHOICES)
slug = models.SlugField(max_length=150, unique=True, db_index=True)
city = models.CharField(max_length=20)

IN VIEWS.PY

def lawyer_list(request, category_slug=None):

if request.method == 'POST':
    cat_form = CategoryForm(request.POST)
    if cat_form.is_valid():
        cat_obj = cat_form.save(commit=False)
        cat_obj.profile = request.user.profile
        cat_obj.save()
    lawyer_form = LawyerForm(request.POST)
    if lawyer_form.is_valid():
        lawyer_form = lawyer_form.save(commit=False)
        lawyer_form.profile = request.user.profile
        lawyer_form.category = cat_obj
        lawyer_form.save()

还有两种形式 1) 类 LawyerForm(forms.ModelForm) 2)class CATEGORYForm(forms.ModelForm)

在视图中我不想创建两个对象

Forms.py

enter code here
CATEGORY_CHOICES = (('CRIMINAL', 'Criminal'),('EMPLOYMENT', 'Employment'),
('CORPORATE', 'Corporate'),)


class CategoryForm(forms.ModelForm):

category_name = forms.CharField(max_length=3,
                           widget=forms.Select(choices=CATEGORY_CHOICES),)

class Meta:
    model = Category
    fields = ('category_name','city',)


class LawyerForm(forms.ModelForm):
class Meta:
    model = Lawyer
    fields = ('name','description','charge','available',)

【问题讨论】:

    标签: django django-models django-forms django-views foreign-keys


    【解决方案1】:
    class Lawyer(models.Model):
        category = models.ForeignKey(Category, related_name='lawyer',   on_delete=models.CASCADE)
        profile = models.ForeignKey(Profile, related_name='profiles', on_delete=models.CASCADE)
        name = models.CharField(max_length=100, db_index=True)
        slug = models.SlugField(max_length=100, db_index=True)
    
    class Category(models.Model):
        profile = models.ForeignKey(Profile, related_name='profile', on_delete=models.CASCADE)
        category_name = models.CharField(max_length=10, db_index=True,choices=CATEGORY_CHOICES)
        slug = models.SlugField(max_length=150, unique=True, db_index=True)
        city = models.CharField(max_length=20)
    
        def save(self, *args, **kwargs):
            lawyer=Lawyer(*args,**kwargs)
            lawyer.category=self
            lawyer.save()
            super(Category, self).save(*args, **kwargs)
    

    在视图中

    def lawyer_list(request, category_slug=None):
    
        if request.method == 'POST':
            cat_form = CategoryForm(request.POST)
            if cat_form.is_valid():
                cat_obj = cat_form.save(commit=False)
                cat_obj.profile = request.user.profile
                cat_obj.save()
    

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 2014-02-26
      • 2019-08-16
      • 2013-05-16
      • 2012-02-14
      • 2012-12-16
      • 1970-01-01
      • 2020-08-08
      相关资源
      最近更新 更多