![](/img/trans.png)
[英]Display fields from one model in another in Django Admin connected with a Foreignkey
[英]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
將為您提供Dog
的name
字段和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.