多模型inlineformset djang

2024-03-29 01:35:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个网站,输入不同产品地点(餐厅、超市、药店)不同产品的价格

一个用户可以进入许多产品的地方 一个产品的地方可以有很多产品 一个商品店(比如餐馆)可以有很多菜单

所以我有三个模型: 1.第一个是“ProductPlace”,其外键为网站用户模型(“user”)

  1. 第二种是以“ProductPlace”模型为外键的“产品”
  2. 第三种是“菜单”(如餐厅菜单),也有“ProductPlace”模式作为外键

我在“forms.py”文件中创建了与这三个模型相关联的表单集。但我不知道怎么处理“views.py”

#models.py

from django.db import models
from django.core.validators import FileExtensionValidator
from .validators import validate_file_extension
from django.contrib.auth import get_user_model

User = get_user_model()

# Create your models here.
class ProductPlace(models.Model):
    name = models.CharField(max_length=50)
    num_road = models.IntegerField(blank=False, null=False)
    name_road = models.CharField(max_length=50)
    postal_code = models.IntegerField(blank=False, null=False)
    city =  models.CharField(max_length=50)
    country =  models.CharField(max_length=50)
    acquired_by = models.ForeignKey(User, related_name="product_places", 
                            null=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=50)
    price = models.IntegerField(blank=False, null=False)
    place = models.ForeignKey(ProductPlace,related_name="products", on_delete=models.CASCADE)
    class Meta:
        ordering = ('name',)
    def __str__(self):
        return self.name

class Menu(models.Model):
    name = models.CharField(max_length=50)
    price = models.IntegerField(blank=False, null=False)
    place = models.ForeignKey(ProductPlace, related_name="menus", on_delete=models.CASCADE)
    class Meta:
        ordering = ('name',)
    def __str__(self):
        return self.name


#forms.py

from django import forms
from .models import *
from django.forms.models import inlineformset_factory, modelformset_factory
from django.contrib.auth import get_user_model

User = get_user_model()

ProductPlaceFormSet = inlineformset_factory(
    User, ProductPlace, fields=['name', 'num_road', 'name_road', 'postal_code', 'city', 'country'], 
    extra=1, can_delete=True
)       


ProductFormSet = inlineformset_factory(
    ProductPlace, Product, fields=['name', 'price'], 
    extra=1, can_delete=True
)       

MenuFormSet = inlineformset_factory(
    ProductPlace, Menu, fields=['name', 'price'], 
    extra=1, can_delete=True
)       

我想获得一个窗体视图与添加按钮和删除按钮为产品的地方,产品和菜单


Tags: djangonamefromimportselffalse产品models