Django models ForeignKey在这个Django示例中是如何工作的?

Django models ForeignKey在这个Django示例中是如何工作的?,django-models,django-views,Django Models,Django Views,我很难理解如何使用ForeignKey以及它的具体用途。它连接两个表吗?还是在每个表之间链接特定的列?下面是一个非常基本的例子: class Seller(models.Model): name = models.CharField() email = models.CharField() zipcode = models.CharField() class ItemsForSale(models.Model): item = models.CharField(

我很难理解如何使用ForeignKey以及它的具体用途。它连接两个表吗?还是在每个表之间链接特定的列?下面是一个非常基本的例子:

class Seller(models.Model):
    name = models.CharField()
    email = models.CharField()
    zipcode = models.CharField()

class ItemsForSale(models.Model):
    item = models.CharField()
    description = models.CharField()
    zipcode = models.ForeignKey(Seller)
我想做的是,当有人填写表格来销售商品时,我希望该商品的zipcode自动设置为sellers zipcode(这样最终用户甚至不必在表格中填写zipcode)

为什么是ForeignKey(Seller)而不是ForeignKey(Seller.zipcode)?我想我不明白我是不是把整个“卖家”表连起来了?或者只是zipcode列


因为我不了解ForeignKey是如何工作的,所以我不知道如何编写一个视图方法来设置ItemsForSale的zipcode。所以我真的认为帮助我理解这一切的关键是看到一个合适的视图方法,它将ItemForSale的zipcode设置为Sellers的zipcode

在Django中,
ForeignKey
是对象之间的关系

在数据库中,
ForeignKey
是表中链接到另一个表的行的字段(列)

有关
外键的更多信息,请访问和

现在来看你的Django示例:

每个项目(ItemsForSale)都有一个卖家。(注意:模型名称应始终为单数。)

因此,我们在您的
ItemsForSale
-模型中添加了一个与物品卖家相关的
ForeignKey

class ItemsForSale(models.Model):
    ...
    seller = models.ForeignKey(Seller)
现在,您可以通过以下方式访问物品的卖家(当然还有他的所有属性(包括zipcode):

ItemsForSale.get(item='Foo').seller.zipcode

谢谢,这是有道理的,但是在ItemsForSale类下,我是否也应该将zipcode=models.ForeignKey(Seller)?否,因为
Seller=models.ForeignKey(Seller)
已经将您的商品与其卖家连接起来。正如我前面所说的,您可以通过商品与其卖家的关系访问卖家的zipcode。
zipcode=models.ForeignKey(卖家)
没有真正意义,因为它会在商品和卖家之间创建另一种关系,但与商品卖家的关系将被称为“zipcode”(而不是卖家),这意味着您必须访问这样的zipcode:
item.zipcode.zipcode
而不是
item.seller.zipcode
。我理解。因此我可以执行zipcode=models.Charfield(最大长度=8)类内ItemForSale。物品的zipcode是否始终与相关卖家的zipcode相同?如果是,则在
ItemForSale
中不需要额外的
zipcode
-属性。如果物品的zipcode与卖家的zipcode不同,则应在
ItemForSale
中添加一个
zipcode
-属性。好的,这是合理的他们总是一样的。谢谢!