2014-02-12 1 views
1

У меня есть следующий код:Джанго один-ко-многим, добавить поля динамически администратора

class Item(models.Model): 
    name = models.CharField(max_length=100) 
    keywords = models.CharField(max_length=255) 
    type = models.ForeignKey(Type) 

    class Meta: 
     abstract = True 

class Variant(models.Model): 
    test_field = models.CharField(max_length=255) 

class Product(Item): 
    price = models.DecimalField(decimal_places=2, max_digits=8,null=True, blank=True) 
    brand = models.ForeignKey(Brand) 
    variant = models.ForeignKey(Variant) 

    def get_fields(self): 
     return [(field.name, field.value_to_string(self)) for field in Product._meta.fields] 

    def __unicode__(self): 
     return self.name 

Im используя Grappelli. Я хочу, чтобы мой продукт имел несколько вариаций. Должен ли я использовать manytomanyfield?

Я хочу, чтобы иметь возможность добавлять варианты к моему продукту непосредственно в Admin. Теперь я получаю пустое dropwdown без вариантов (потому что они не существуют).

Я думал, что Django сделал это автоматически, когда u задал внешний ключ?

Как я могу получить поля Variant для отображения непосредственно на моей странице продукта в редакторе? Я читал информацию о встроенных полях в Admin?

ответ

2

Ну, это наоборот :)

1/Поместите ключевое поле иностранного в вашем Variant, а не в продукт (то, что вы описываете фактически OneToMany отношения).

2/Свяжите вариант с вашим продуктом в относительном продуктеAdmin в admin.py как встроенный (i.e VariantInline).

Смотрите документацию для получения более подробной информации: https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#inlinemodeladmin-objects

Надеется, что это помогает!

С уважением,

+0

Работал как очарование! Спасибо! Возможно ли иметь вложенные inlinemodels? Если я хочу добавить другой класс в Variantmodel, возможно ли это? Я попытался сделать то же самое, но я не получил его работать ... – JOSEFtw