在Django中是否有办法在另一个对象中存储和管理多个对象(在Django admin中)?
示例,我有两个模型:Items和RMA。 RMA内部可能有多个项目。每个Item都是独一无二的,因为它是一个库存的部分,所以我不能用foreignKey多次引用同一个项目(尽管我可能误解了它的使用/实现)。
所以现在,我有一个Item模型:
class Item(models.Model):
serial_number = models.CharField(max_length=200)
name = models.CharField(max_length=200)
part_number = models.CharField(max_length=200)
location = models.CharField(max_length=200)
def __unicode__(self):
return self.name
一个RMA模型:
class RMA(models.Model):
number = models.AutoField(primary_key=True)
items = ?????
最终我希望能够继续使用Django管理功能在必要时添加/删除RMA中的项目,因此我一直没有序列化列表然后反序列化显示。任何帮助将不胜感激。
答案 0 :(得分:1)
您正在为has-many关系建模。
这将使用项目到RMA的Foreign Key建模:
class Item(models.Model):
serial_number = models.CharField(max_length=200)
name = models.CharField(max_length=200)
part_number = models.CharField(max_length=200)
location = models.CharField(max_length=200)
rma = models.ForeignKey(RMA)
def __unicode__(self):
return self.name
要在RMA
的管理员中访问,您需要djangos InlineAdmin功能。
您可以在django tutorial part2中找到示例。
答案 1 :(得分:1)
您实际上是在描述Many-To-One relation,为此,您必须将ForeignKey引用添加到Item
模型,而不是RMA
模型。
您还可以添加related_name
,为RMA
模型提供可以调用的属性。
例如:
class Item(models.Model):
rma = models.ForeignKey(RMA,related_name="items")
serial_number = models.CharField(max_length=200)
# etc...
要管理这些内容的创建,您需要InlineModelAdmin form,因此您的admin.py
文件必须如下所示:
from django.contrib import admin
class ItemInline(admin.TabularInline):
model = Item
class RMAAdmin(admin.ModelAdmin):
inlines = [
ItemInline,
]