我正在尝试使用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')
答案 0 :(得分:1)
这不是ForeignKey关系如何工作的。建立关系时,您与一个对象(另一个表)建立关系,而不是与该表的特定列建立关系。
因此,如果myDog = MyDog(name=Dog.objects.first())
在数据库中创建与第一个MyDog
相关的Dog
对象,那么myDog.name.name
将为您提供{ {1}}和name
会带给您这个品种。如您所见,您的模型没有通过这种方式很好地定义。
更合理的结构是:
Dog
答案 1 :(得分:0)
显示的内容是您定义的内容
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