【问题标题】:Django admin - Edit parent model and related models on the same pageDjango admin - 在同一页面上编辑父模型和相关模型
【发布时间】:2010-06-27 23:26:44
【问题描述】:

我希望能够编辑一页上的所有数据。我怎样才能做到这一点?我应该修改我的模型吗?如果是这样,那么我应该如何修改它们?

class TextStyle(models.Model):
    color = models.CharField(_("color"), max_length=7)
    style = models.CharField(_("style"), max_length=30)
    typeface = models.CharField(_("typeface"), max_length=100)

class GenericText(models.Model):
    text = models.TextField(_("text"))
    lines = models.IntegerField(_("number of lines"))
    style = models.ForeignKey(TextStyle, verbose_name=_('text style'), blank=False)


class ExpirationDate(models.Model):
    date = models.DateField(_("date"))
    style = models.ForeignKey(TextStyle, verbose_name=_('text style'), blank=False)

class Coupon(models.Model):
    name = models.CharField(_("name"), max_length=100)
    slug = AutoSlugField(populate_from="title")
    background = models.ImageField(upload_to="userbackgrounds")
    layout = models.ForeignKey(Layout, verbose_name=("layout"), blank=False)
    logo = models.ImageField(upload_to="logos")
    title = models.OneToOneField(GenericText, verbose_name=("title"), blank=False, related_name="coupon_by_title")
    body = models.OneToOneField(GenericText, verbose_name=("body"), blank=False, related_name="coupon_by_body")
    disclaimer = models.OneToOneField(GenericText, verbose_name=("disclaimer"), blank=False, related_name="coupon_by_disclaimer")
    promo_code = models.OneToOneField(GenericText, verbose_name=("promo code"), blank=False, related_name="coupon_by_promo")
    bar_code = models.OneToOneField(BarCode, verbose_name=("barcode"), blank=False, related_name="coupon_by_barcode")
    expiration = models.OneToOneField(ExpirationDate, verbose_name=("expiration date"), blank=False, related_name="coupon_by_expiration")
    is_template = models.BooleanField( verbose_name=("is a template"), )
    category = models.ForeignKey(Category, verbose_name=("category"), blank=True,null=True, related_name="coupons")
    user = models.ForeignKey(User, verbose_name=("user"), blank=False)

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您需要在 admin.py 中创建一个内联模型。请参阅:InlineModelAdmin

    【讨论】:

    • 据我了解,Inline 允许在子页面上编辑父模型,但反之亦然(父模型上的子模型)。如果我错了,你能提供一个代码来允许什么..
    • 德米特里,我认为你错了。内联允许您在父页面上编辑子模型,但反之亦然。
    • 没错,InlineModelAdmin 允许您将子项编辑成对象更改页面。
    【解决方案2】:

    我创建了一个用于内联编辑 OneToOne 关系的模块,我称之为 ReverseModelAdmin。你可以找到它here

    您可以在您的 Coupon 实体上使用它来内联所有 OneToOne 关系,如下所示:

    class CouponAdmin(ReverseModelAdmin):
        inline_type = 'tabular'
    admin.site.register(Coupon, CouponAdmin)
    

    买者自负。我必须破解很多内部结构才能使其正常工作,因此解决方案很脆弱并且很容易损坏。

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 2018-04-27
      • 2016-12-19
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多