簡體   English   中英

DJANGO 將字段中的模型類型保存為通用外鍵

[英]DJANGO saving model types in a field as Generic Foreign Keys

我想創建一個看起來像這樣的新模型:

class Note(models.Model):
   id = models.AutoField(primary_key=True)
   title = ...
   message = 
   entity = *****************

我希望 ******* - 成為任何模型的foreingKey - 不是對象而是模型。 我不希望實體是同一模型的多個對象 - 只是模型。

因此,如果注釋來自 Post 實體應另存為 Post,如果它來自 Notification,則 foriengKey 應為 Notification。

有沒有辦法在 django 中做到這一點,還是我唯一的選擇是將實體名稱保存為字符串值? 並過濾模型名稱,例如。

# Get all the notes for POST Model
Note.objects.filter(entity="Post")

您可以在 Django 中使用contenttypes應用程序。

class Note(models.Model):
   id = models.AutoField(primary_key=True)
   title = models.CharField(max_length=50)
   content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
   object_id = models.PositiveIntegerField()
   entity = GenericForeignKey('content_type', 'object_id')

您將能夠分配entity模型實例,並對它們執行查詢( filter(entity=MyModel.objects.get(id=1))

聽起來您真正要尋找的是“ 選擇”。

一個可迭代對象(例如,列表或元組)由恰好兩個項目(例如 [(A, B), (A, B) ...])的可迭代對象組成,用作該字段的選擇。 如果給出了這個,默認的表單小部件將是一個帶有這些選項的選擇框,而不是標准的文本字段。

現在你的模型變成

class Note(models.Model):
    POST = "Post"
    COMMENT = "Comment"
    ...
    ENTITY_CHOICES( (POST,POST), (Comment, Comment) ...)

    id = models.AutoField(primary_key=True)
    title = ...
    message = ...
    entity = models.CharField(max_lenth=5, choices=ENTITY_CHOICES)

現在您可以在評論中運行查詢

 Note.objects.filter(entity="Post")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM