【问题标题】:Django add field to query setDjango将字段添加到查询集
【发布时间】:2018-03-10 03:20:09
【问题描述】:

您好,我的 django 项目中有 3 个模型,当用户发送请求时,我有他的dealer_id 我需要返回查询集,其中包含材料表中的材料信息,并为每一行添加最后一个模型的 discount_percent,其中dealer_id = 当前dealer_id 和行标识。如果你有答案,请帮助我。

型号

class Material(models.Model):
    id = models.AutoField(primary_key=True)
    color = models.IntegerField() 
    name = models.CharField(max_length=100)
    material_width = models.IntegerField()
    price = models.BigIntegerField(default=0)  

class Dealer(models.Model):
    id = models.AutoField(primary_key=True)
    dealer_name = models.CharField(max_length=100)
    dealer_phone = models.CharField(max_length=13, unique=True)
    dealer_email = models.CharField(max_length=150, null=False, unique=True)
    dealer_firm_name = models.CharField(max_length=100, null=True)
    dealer_address = models.CharField(max_length=100, null=True)
    dealer_unp = models.CharField(max_length=9, null=True)
    dealer_amount = models.FloatField(default=0.0)
    user_id = models.BigIntegerField(unique=True) 

class MaterialDealerPrice(models.Model):
    id = models.AutoField(primary_key=True)
    dealer_id = models.BigIntegerField(null=False)
    material_id = models.BigIntegerField(null=False)
    discount = models.FloatField(null=True, default=0.0)

【问题讨论】:

  • 请添加您的模型描述而不是文本,以及您已经尝试过的内容。
  • 类 Material(models.Model): id = models.AutoField(primary_key=True) color = models.IntegerField() name = models.CharField(max_length=100) material_width = models.IntegerField() price = models.BigIntegerField(default=0)
  • 我的意思是所有模型,而不是评论,编辑你的问题
  • 我很明白,但这是我在 stackowerflow 上的第一个问题,我不知道如何编辑问题
  • 你没有ForeignKey为什么会这样?

标签: mysql django django-models django-queryset


【解决方案1】:

这看起来像是一组通过运行 inspectdb 自动创建的模型。您应该始终将该输出视为初稿;有很多事情需要手动完成。

首先,您的 MaterialDealerPrice 模型需要有 Dealer 和 Material 的外键:

class MaterialDealerPrice(models.Model):
    dealer = models.ForeignKey('Dealer', null=False)
    material = models.ForeignKey('Material', null=False)
    discount = models.FloatField(null=True, default=0.0)

其次,你应该认识到这个模型实际上是多对多关系的直通表。

class Material(models.Model):
    ...
    dealers = models.ManyToManyField('Dealer', through='MaterialDealerPrice')

现在,您应该能够在查询中遵循这些关系。不幸的是,您的问题不够清楚,无法知道您真正想要做什么;您应该给出所需输出的示例。

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多