Django 管理后台 - 在同一页面编辑父模型及相关模型
我想在一个页面上编辑所有的数据。我该怎么做呢?我需要修改我的模型吗?如果需要的话,我该怎么修改它们呢?
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)
2 个回答
0
我创建了一个模块,用于在线编辑一对一关系,叫做ReverseModelAdmin。你可以在这里找到它。
你可以在你的优惠券实体上使用它,这样就能像下面这样把所有的一对一关系都放在一起编辑:
class CouponAdmin(ReverseModelAdmin):
inline_type = 'tabular'
admin.site.register(Coupon, CouponAdmin)
需要注意的是,我为了让它工作,动了很多内部的东西,所以这个解决方案比较脆弱,可能会很容易出问题。
1
你需要在你的 admin.py 文件里创建一个内联模型。可以参考这个链接: InlineModelAdmin。