【问题标题】:How to add manytomanyfield attributs with form instead select option field in Django?如何在 Django 中使用表单添加 manytomanyfield 属性而不是选择选项字段?
【发布时间】:2021-09-13 01:05:13
【问题描述】:

信息:我有两个模型 customer 和 items 模型。客户具有 ManyToManyField 项目属性。我的 Createview 在创建新客户时工作正常,多个项目保存在数据库中,我可以在表单中选择多个项目。但是

问题:我想在客户表单中添加 itemform 属性。当我创建新客户时,我需要与新客户一起保存新项目...

模型.py

class Item(models.Model):
    name = models.CharField(max_length=255)
    datetime = models.DateTimeField(auto_now_add=True)
    amount = models.FloatField(default=0)
    remaining = models.FloatField(default=0)
    
class Customer(models.Model):
    name = models.CharField(max_length=255)
    phone = models.CharField(max_length=11)
    items = models.ManyToManyField(Items)

forms.py

class ItemForm(forms.ModelForm):
    class Meta:
        model = Installment
        fields = '__all__'


class CustomerForm(forms.ModelForm):

    class Meta:
        model = Customer
        fields = '__all__'

views.py

def customer_create_view(request):
    if request.method == 'POST':
        form = CustomerForm(request.POST)
        items = ItemForm(request.POST)

        if form.is_valid():
            if items.is_valid():
                items.save()
            form.save()
            return redirect("/")
    else:
        form = CustomerForm()
        items = ItemForm()
        context = {
            'form': form,
            'items': items
        }
        return render(request, 'customer/app.html', context)

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    您可以通过添加 CustomerItem 模型来修改您的模型。这将处理相关项目和客户的所有记录。

    class Item(models.Model):
        name = models.CharField(max_length=255)
        datetime = models.DateTimeField(auto_now_add=True)
        amount = models.FloatField(default=0)
        remaining = models.FloatField(default=0)
        
    class Customer(models.Model):
        name = models.CharField(max_length=255)
        phone = models.CharField(max_length=11)
        
    class CustomerItem(models.Model):
        item = models.ForeignKey(Item, related_name='items', on_delete=models.CASCADE)
        customer = models.ForeignKey(Customer, related_name='customers', on_delete=models.CASCADE)
    

    通过此实现,您可以在创建客户的同时保存您想要创建的任何项目。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 2019-03-21
      • 2020-06-12
      • 2012-04-20
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多