Django中的多对一关系与现有对象

时间:2015-01-16 19:23:23

标签: python django many-to-one

我昨天开始研究Django,但是根据我之前创建的对象创建多对一关系时遇到了一些麻烦。

models.py

# -*- coding: utf-8 -*-
from django.db import models

class Item(models.Model):
    code = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150, unique=True)

    class Meta:
        ordering = ('name', 'code')

    def __unicode__(self):
        return self.name


class Product(models.Model):
    code =  models.AutoField(primary_key=True)
    name = models.CharField(max_length=150, unique=True)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    photo = models.ImageField(null=True, blank=True, upload_to='/img/products')
    items = models.ForeignKey('Item')

    class Meta:
        ordering = ('name', 'code')

    def __unicode__(self):
        return self.name

admin.py

# -*- coding: utf-8 -*-
from django.contrib import admin
from Cadastro.models import Item, Product

class ItemAdmin(admin.ModelAdmin):
    model = Item
    list_display = ['code', 'name']
    list_filter = []
    search_fields = ['name', 'code']
    save_on_top = True


class ProductAdmin(admin.ModelAdmin):
    model = Product
    list_display = ['name', 'price']
    list_filter = []
    search_fields = ['name']
    save_on_top = True

admin.site.register(Item, ItemAdmin)
admin.site.register(Product, ProductAdmin)

问题:

我的问题在这里:

items = models.ForeignKey('Item')

我想首先创建各种 Item 对象。

之后,当我创建商品时,我希望看到所有商品的列表,并选择许多商品作为的一部分产品

1 个答案:

答案 0 :(得分:2)

你的关系走错了路。如果Product可以包含多个Item,请从ForeignKeyItem生成Product。对于ForeignKey上的Product,您说每个产品只有一个Item,但每个Item可以属于多个Product。< / p>

文档有更多细节和示例: https://docs.djangoproject.com/en/1.7/topics/db/examples/many_to_one/