【问题标题】:Create unique id by combining Charfield and ForeignKey from other model通过组合来自其他模型的 Charfield 和 ForeignKey 创建唯一 id
【发布时间】:2021-04-05 13:44:38
【问题描述】:

我在设置具有多对多关系的网站流时遇到问题。

例如,有许多模型具有多种类型,反之亦然。我的 URL 设置为 site/model/typed/detail

由于类型和模型是多对多,我无法传递到我的详细信息页面。

我想我可以通过创建变量来规避这个问题,这些变量实际上将模型链接到类型,让它详细地用作唯一标识符外键。它看起来像:site/model/model_type/detail

但是,我无法提取这些值。如果有更简单的方法来解决这个问题,请告诉我!

class typed(models.Model):
typed = models.CharField(max_length=200, help_text='Enter MFG - Type')

model = models.ForeignKey('model', on_delete=models.SET_NULL, null=True)

model_type = model + typed

def get_absolute_url(self):
    return reverse('typed-detail', args=[str(self.model), str(self.model_type)])

def __str__(self):
    return self.model_type

我收到此错误:TypeError: unsupported operand type(s) for +: 'ForeignKey' and 'CharField'

【问题讨论】:

  • Pete,我可能完全错了,但我不确定这是用 Django 的 ORM 建模的常用方法。一方面,最简单的答案是找到一种方法将 modeltyped 的值强制转换为字符串,然后将它们连接起来,但不知道更多关于你的目标,也许一两个他们如何'd 相关,我不确定这能解决更大的问题。您是否考虑过使用 Django 的 ManyToMany 字段类型? docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many

标签: python django django-models foreign-keys


【解决方案1】:

你可以这样做

class typed(models.Model):
typed = models.CharField(max_length=200, help_text='Enter MFG - Type')

model = models.ForeignKey('model', on_delete=models.SET_NULL, null=True)

def get_absolute_url(self):
    return reverse('typed-detail', args=[str(self.model), "%s%s" % (self.model,self.typed)])

【讨论】:

  • 这是有效的,我可以告诉它正在传递正确的部分,谢谢!
【解决方案2】:

model 模型的__str__ 方法是什么? 如果是 return self.title 之类的,你可以试试这个:

def __str__(self):
    return str(self.model)+ ' ' + str(self.typed)

【讨论】:

  • get_absolute_url 部分呢?
猜你喜欢
  • 2020-10-30
  • 2018-05-10
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 2017-10-20
  • 1970-01-01
相关资源
最近更新 更多