首页 > 解决方案 > 需要相关名称参数

问题描述

我收到了以下错误,我不确定如何在我的模型中处理这个错误。

HINT: Add or change a related_name argument to the definition for 'UserCart.state_tax' or 'UserCart.fed_tax'.
userorders.UserCart.state_tax: (fields.E304) Reverse accessor for 'UserCart.state_tax' clashes with reverse accessor for 'UserCart.other_tax'.

模型.py

class UserCart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, default=None) 
    state_tax = models.ForeignKey(Tax, on_delete=models.SET_NULL, null=True)    
    fed_tax = models.ForeignKey(Tax, on_delete=models.SET_NULL, null=True)

标签: djangodjango-models

解决方案


这是必要的,因为您有两个UserCartTax模型的引用。因此,这意味着反向关系(从TaxUserCart)不能是usercart_set,因为从那时起我们不清楚我们反向使用哪种关系。

因此,我们至少应该给其中一个关系起一个相关的名称(不同于usercart_set)。例如:

from django.contrib.auth import get_user_model

class UserCart(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, default=None) 
    state_tax = models.ForeignKey(
        Tax,
        related_name='state_usercarts',
        on_delete=models.SET_NULL,
        null=True
    )
    fed_tax = models.ForeignKey(
        Tax,
        related_name='fed_usercarts',
        on_delete=models.SET_NULL,
        null=True
    )

注意:您可能希望使用get_user_model[Django-doc]而不是对User自身的引用。如果您稍后更改用户模型,那么ForeignKey将自动引用新的用户模型。


推荐阅读