【问题标题】:How can I use id as foreign key in django?如何在 django 中使用 id 作为外键?
【发布时间】:2020-04-19 17:54:56
【问题描述】:

假设我需要创建这 2 个模型。1.使用字段名称、描述、价格创建产品模型 2.使用 ProductID(外键参考)、名称、描述、价格、数量创建库存模型。 现在我的问题是如何将 id 作为从 Product 到 Stock 模型的外键?

【问题讨论】:

  • 是否可以提出问题。仅提供模型的一些骨架不是问题。你到底想解决什么问题,为什么你认为使用id作为`ForeignKey`是一个解决方案?
  • 假设我需要创建这 2 个模型。1.使用字段名称、描述、价格制作产品模型 2.使用 ProductID(外键参考)、名称、描述、价格、数量制作库存模型...现在我的问题是如何将 id 作为从 Product 到 Stock 模型的外键?

标签: django python-3.x


【解决方案1】:

您可以将ForeignKey 标记为primary_key=True [Django-doc]

class Product(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=4096)
    price = models.DecimalField(max_digits=15, decimal_places=2)

class Stock(models.Model):
    product = models.OneToOneField(
        Product,
        primary_key=True,
        on_delete=models.CASCADE
    )
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=4096)
    price = models.DecimalField(max_digits=15, decimal_places=2)
    quantity = models.IntegerField()

因为这是一个主键,所以这是一个唯一的字段。因此,您可以创建两个或多个 Stock 对象来引用相同 Product

【讨论】:

  • 不工作。SystemCheckError:系统检查发现一些问题:错误:: (admin.E108) 'list_display[0]' 的值是指'product ',它不是可调用的,不是“StockAdmin”的属性,也不是“Product_Detials.Stock”的属性或方法。警告:Product_Detials.Stock.product: (fields.W342) 在 ForeignKey 上设置 unique=True 与使用 OneToOneField 具有相同的效果。提示:OneToOneField 通常更好地服务 ForeignKey(unique=True)。
  • @mehedi1501:但看起来问题出在ModelAdmin,而不是Model本身?
  • #code for admin.py from django.contrib import admin from .models import Product,Stock class ProductAdmin(admin.ModelAdmin): list_display = ('id','name', 'description') admin.site.register(Product, ProductAdmin) class StockAdmin(admin.ModelAdmin): list_display = ('product','name', 'description','price','quantity') admin.site.register(Stock, StockAdmin )
  • 你能告诉我问题出在哪里吗?这对我很有帮助
猜你喜欢
  • 2014-05-09
  • 2013-10-26
  • 2020-07-12
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2016-04-05
  • 2022-06-25
相关资源
最近更新 更多