簡體   English   中英

如何使用一個模型到另一個模型的多個字段作為外鍵?

[英]How to use multiple fields from one model to another as foreignkey?

我正在嘗試使用Dog模型中的多個字段作為MyDog模型中的選擇。 當我創建一個新的MyDog實例時,它們都顯示Dog.name中的內容。 如何使MyDog.breed看到Dog.breed中的內容?

class Dog(models.Model):
name = models.CharField(max_length=10)
breed = models.CharField(max_length=10,unique=True)
def __str__(self):
    return self.name

class MyDog(models.Model):   
    name=models.ForeignKey(Dog,related_name='mydogname',on_delete=models.CASCADE)
    breed = models.ForeignKey(Dog,related_name='mydogbreed',on_delete=models.CASCADE,to_field='breed',db_column='breed')

那不是ForeignKey關系如何工作的。 建立關系時,您與一個對象(另一個表)建立關系,而不是與該表的特定列建立關系。

因此,如果myDog = MyDog(name=Dog.objects.first())創建與數據庫中第一個Dog相關的MyDog對象,則myDog.name.name將為您提供Dogname字段和myDog.name.breed會給你這個品種。 如您所見,您的模型沒有通過這種方式很好地定義。

一個更合理的結構是:

 class Breed(models.Model):
     name = models.CharField(...)

     def __str__(self):
         return self.name

 class Dog(models.Model):
     name = models.CharField(...)

 class MyDog(models.Model):
     dog = models.ForeignKey(Dog)
     breed = models.ForeignKey(Breed)

 dog = Dog.objects.create(name='Pluto')
 breed = Breed.objects.create(name='Collie')
 my_dog = MyDog(dog=dog, breed=breed)
 my_dog.breed.name  # "Collie"
 print(my_dog.breed)  # "Collie" because of __str__()

顯示的內容是您定義的內容

def __str__(self):
    return self.name

大致翻譯為“ Dog實例的字符串表示形式”。 我認為您不能根據它們所使用的ForeignKey字段進行更改,但是它不應該對功能產生任何影響,而應僅對它的顯示方式產生影響。 您可以根據需要打印以下品種:

my_dog = MyDog.objects.get(...)
print my_dog.breed # this prints what __str__ method prints for dog
print my_dog.breed.breed # this prints breed field of dog

暫無
暫無

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

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