问题描述
我正在使用 Django 多态,我认为这可能是我的困境背后的原因。
我想通过要添加的外键将模型的一些实例连接到其他三个实例,而其他实例则没有,我不知道该怎么做,是否需要中间步骤,我该怎么办?
这是我的模型:
from django.db import models
from polymorphic.models import polymorphicModel
from django.contrib.contenttypes.fields import GenericRelation
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class usermodel(models.Model):
MEMBERSHIP_TYPE = [
('NM','norMAL'),('PT','PLATA'),('OR','ORO'),('PL','PLATINO'),]
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=100,unique=True)
photo = models.ImageField(upload_to='images/',blank=True)
address = models.TextField()
client_type = models.CharField(max_length=2,choices=MEMBERSHIP_TYPE,default= 'NM')
def __unicode__(self):
return self.name
class ArticleModel(models.Model):
id = models.AutoField(primary_key=True)
code = models.IntegerField(unique=True)
description = models.TextField()
def __str__(self):
return str(self.code)
class OrderModel(models.Model):
id = models.AutoField(primary_key=True)
client = models.ForeignKey('usermodel',on_delete=models.CASCADE)
gen_time = models.DateTimeField(auto_Now_add=True)
gen_supplied = models.DateTimeField(null=True,blank=True)
urgent = models.BooleanField()
order_to = models.ForeignKey('OrderToModel',on_delete=models.CASCADE)
article = models.ForeignKey('ArticleModel',on_delete=models.CASCADE)
quantity= models.IntegerField()
class OrderToModel(polymorphicModel):
id = models.AutoField(primary_key=True)
class WarehouseModel(OrderToModel):
warehouse_num = models.IntegerField(unique=True)
name = models.CharField(max_length=100)
address = models.TextField()
articles = models.ManyToManyField(ArticleModel,blank=True)
def __str__(self):
return "Warehouse"+ str(self.warehouse_num)
class StoreOrderModel(OrderToModel):
reference = models.IntegerField(unique=True)
store_num = models.ForeignKey('StoreModel',on_delete=models.CASCADE)
def __str__(self):
return str(self.reference)
class StoreModel(models.Model):
store_num = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
address = models.TextField()
articles = models.ManyToManyField(ArticleModel,blank=True)
def __str__(self):
return str(self.store_num)
class BusinessOrderModel(OrderToModel):
reference = models.IntegerField(unique=True)
business_num = models.ForeignKey('BusinessModel',on_delete=models.CASCADE)
def __str__(self):
return str(self.reference)
class BusinessModel(models.Model):
Business_num = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
address = models.TextField()
articles = models.ManyToManyField(ArticleModel,blank=True)
def __str__(self):
return str(self.Business_num)
class DetailModel(models.Model):
id = models.AutoField(primary_key=True)
detail = models.TextField()
order = models.ForeignKey('BusinessOrderModel',related_name="details",on_delete=models.CASCADE)
这是我设置管理页面的方式(这可能是问题的一部分,因为我尝试执行的所有操作都是通过管理执行的):
from django.contrib import admin
from .models import OrderModel,usermodel,ArticleModel,\
WarehouseModel,StoreModel,BusinessModel,DetailModel,\
StoreOrderModel,BusinessOrderModel
class UserAdmin(admin.ModelAdmin):
pass
admin.site.register(usermodel,UserAdmin)
class DetailInline(admin.TabularInline):
model = DetailModel
class OrderAdmin(admin.ModelAdmin):
pass
admin.site.register(OrderModel,OrderAdmin)
class ArticleAdmin(admin.ModelAdmin):
pass
admin.site.register(ArticleModel,ArticleAdmin)
class WarehouseAdmin(admin.ModelAdmin):
pass
admin.site.register(WarehouseModel,WarehouseAdmin)
class StoreAdmin(admin.ModelAdmin):
pass
admin.site.register(StoreModel,StoreAdmin)
class BusinessAdmin(admin.ModelAdmin):
pass
admin.site.register(BusinessModel,BusinessAdmin)
class StoreOrderAdmin(admin.ModelAdmin):
pass
admin.site.register(StoreOrderModel,StoreOrderAdmin)
class BusinessOrderAdmin(admin.ModelAdmin):
inlines = (DetailInline,)
pass
admin.site.register(BusinessOrderModel,BusinessOrderAdmin)
class DetailAdmin(admin.ModelAdmin):
pass
admin.site.register(DetailModel,DetailAdmin)
我不知道我做错了什么。我真的觉得卡住了。任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)