如何从管理员中的(“另一个”)模型注入数据?

时间:2021-02-06 12:48:32

标签: django

我有用户模型

class PublisherProfile(models.Model):
    publisher_id = models.AutoField(primary_key=True)
    user_profile = models.OneToOneField(Profile, on_delete=models.SET_NULL, null=True, verbose_name=_("user profile"))

在管理员中我注册了这个模型:

@admin.register(PublisherProfile)
class PublisherProfileAdmin(admin.ModelAdmin):
    list_display = (
        "publisher_id",
        "user_profile",
    )

在另一个模型中我有:

class PublisherOffer(models.Model):
    offer_owner = models.ForeignKey('user.PublisherProfile', on_delete=models.CASCADE, verbose_name=_("offer owner"), )
    title = models.CharField(_('Offer title'), help_text=_('Title of the offer.'), max_length=250, blank=False,
                             null=False)

如何将所有 PublisherOffer 注入 PublisherProfileAdmin?

1 个答案:

答案 0 :(得分:0)

您可以通过在 PublisherProfileAdmin 中再添加一个字段来将所有 PublisherOffer 注入到 PublisherProfileAdmin:

@admin.register(PublisherProfile)
class PublisherProfileAdmin(admin.ModelAdmin):
    list_display = (
        "publisher_id",
        "user_profile",
        "offers_title"
    )
    def offers_title(self,obj):
        return list(PublisherOffer.objects.filter(offer_owner=obj).values_list('title',flat=True))

@admin.register(PublisherOffer)
class PublisherOfferAdmin(admin.ModelAdmin):
    fields=("offer_owner","title")

输出如下所示: enter image description here


要在 PublisherProfile 预览中获取 PublisherOffer:

在 admin.py 文件中:

@admin.register(PublisherProfile)
class PublisherProfileAdmin(admin.ModelAdmin):
    list_display = (
        "publisher_id",
        "user_profile",
        "offers_title"
    )
    readonly_fields=('offers_title',)

在model.py文件中:

class PublisherProfile(models.Model):
    publisher_id = models.AutoField(primary_key=True)
    user_profile = models.OneToOneField(Volunteer, on_delete=models.SET_NULL, null=True, verbose_name="user profile")
    
    @property
    def offers_title(self):
        return list(PublisherOffer.objects.filter(offer_owner=self.publisher_id).values_list('title',flat=True))

输出: enter image description here