Error:'EventsRaw' has no ForeignKey to 'UserEvents' -在Django Admin中反向相关的GenericForeignKey内联表单

mcdcgff0  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(135)

我在Django admin中尝试将反向相关的GenericForeignKey内联表单添加到模型时遇到错误。特定错误消息指出:“'EventsRaw'没有指向'UserEvents'的ForeignKey。”
以下是我需要的帮助:
1.在Django管理面板中显示UserEvents。
1.当导航到管理 Jmeter 板中的UserEvents页面时,我希望看到所有反向相关的EventsRaw对象的列表。
提前感谢您的帮助!

# models.py
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class UserEvents(models.Model):
    content_type = models.ForeignKey(
        ContentType, on_delete=models.CASCADE, null=True, blank=True
    )
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey("content_type", "object_id")

class EventsRaw(models.Model):
    raw_message = models.JSONField()

# For Creating test data
def create_events_raw():
    events_raw = EventsRaw()
    events_raw.raw_message = "test"
    events_raw.save()

    user_event = UserEvents()
    user_event.content_object = events_raw
    user_event.save()
# admin.py
from django.contrib import admin
from .models import UserEvents, EventsRaw

class EventsRawInline(admin.TabularInline):
    model = EventsRaw

@admin.register(UserEvents)
class User_EventsAdmin(admin.ModelAdmin):
    inlines = (EventsRawInline,)
4smxwvx5

4smxwvx51#

你可以反向添加一个**GenericRelation**[Django-doc],所以:

from django.contrib.contenttypes.fields import GenericRelation

class EventsRaw(models.Model):
    raw_message = models.JSONField()
    user_event = GenericRelation(UserEvents)

至于管理员,你可以在TabularInline上使用**GenericTabularInline**[Django-doc]:

from django.contrib.contenttypes.admin import GenericTabularInline

class EventsRawInline(GenericTabularInline):
    model = EventsRaw

这将生成一个内容类型已填充的查询。但是,虽然GenericForeignKey确实是可能的,但它们通常会引入新的复杂性,因此通常不是一个好主意。

注意:通常Django模型的名字是 * 单数 *,所以是UserEvent而不是UserEvents

相关问题