我试图覆盖admin中的save()方法,以便当我的发布者用户创建其客户用户时,会自动为发布者字段分配当前用户的值。

ValueError: Cannot assign "User: foo": "SimpleSubscriber.publisher" must be a "Publisher" instance.


我使用本教程开始学习:here.

def save_model(self, request, obj, form, change):
    if not change:
        obj.publisher = request.user
    obj.save()


这是保存方法的替代。唯一可以访问管理员的用户是发布者,而Publisher和SimpleSubscriber模型都是用户模型:

class Publisher(User):
    def __unicode__(self):
        return self.get_full_name()

class SimpleSubscriber(User):
    publisher = models.ForeignKey(Publisher)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=100)
    state = USStateField()
    zipcode = models.CharField(max_length=9)
    phone = models.CharField(max_length=10)
    date_created = models.DateField(null=True)
    sub_type = models.ForeignKey(Product)
    sub_startdate = models.DateField()
    def __unicode__(self):
        return self.last_name


我可以用什么替换request.user以便将每个新的SimpleSubscriber分配给当前发布者用户?

最佳答案

您必须将request.user替换为Publisher的实例。

一种方法是:

Publisher.objects.get(**{Publisher._meta.get_ancestor_link(User).name: request.user})


当然,每次调用时都会进行查找,因此您可能希望设计应用程序以对每个请求执行此操作。

另一种方法是(略)滥用django模型系统-一个模型继承自另一个模型,相应的父模型和子模型实例具有相同的id(默认情况下);

Publisher.objects.get(id = request.user.id)

07-24 09:52
查看更多