簡體   English   中英

Django中的OneToMany和OneToOne關系之間的沖突

[英]conflict between OneToMany and OneToOne relationship in Django

我需要定義一個會議模型,其中包括組織者和許多參與者。 所有參與者均來自身份驗證模塊中的標准用戶。

from django.db import models
from django.contrib.auth.models import User

class Meeting(models.Model):
    organizer=models.ForeignKey(User)
    participants=models.ManyToManyField(User)

但是,運行syncdb時,出現以下錯誤

錯誤:一個或多個模型未通過驗證:hub.meeting:字段“ organizer”的訪問者與相關的m2m字段“ User.meeting_set”沖突。 在'organizer'的定義中添加related_name參數。 hub.meeting:m2m字段“參與者”的訪問者與相關字段“ User.meeting_set”沖突。 在“參與者”的定義中添加一個related_name參數。

誰能幫我解決這個問題?

class Meeting(models.Model):
    organizer=models.ForeignKey(User, related_name="meetings_orginizer")
    participants=models.ManyToManyField(User, related_name="meetings_participants")

如果您有一個用戶對象,並且想要向后跟蹤該關系以查找該用戶是其組織者的 會議該用戶是其參加者的會議,則需要在模型上專門命名一個“ related_name”字段以區別他們。 現在,您可以像下面這樣向后跟蹤關系:

me = User.objects.get(id=0)
# Meetings I'm organising
m1 = me.meetings_orginizer.all()
# Meetings I'm participating in
m2 = me.meetings_participants.all()

問題(如錯誤消息所述)與反向關系有關。 當您定義一個外鍵(或many2many)時,django會建立一個反向關系User.meeting_set。 但是,由於有兩個關系,反向關系會發生沖突,因此必須手動指定相關名稱。 這里這里查看文檔

代碼如上面的答案

暫無
暫無

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

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