开发者

Django unique_together on sub-class model for parent attribute?

开发者 https://www.devze.com 2022-12-20 13:26 出处:网络
In this: class Administrator(models.Model): 开发者_StackOverflow中文版user = models.OneToOneField(User, primary_key=True)

In this:

class Administrator(models.Model):
 开发者_StackOverflow中文版   user = models.OneToOneField(User, primary_key=True)
    account = models.ForeignKey(Account)

    class Meta:
        unique_together = (('account', 'self.user.username'),)

The self.user.username part is obviously incorrrect. However, in this:

class Administrator(User):
    account = models.ForeignKey(Account)

    class Meta:
        unique_together = (('account', 'username'),)

would that work since I'm inheriting from User? (I can't test it yet because there are too many elements out of place elsewhere). Can I use the first version with 'user.username' instead though? Or, should I use the second version?


It would be

unique_together = (('account', 'user__username'),)

if I understand what you're trying to do. Note the double underscore. That's how you look at a foreign key's object's properties.


I don't believe you can do what you're trying to do using django core. As pointed out in this answer to a related question unique_together is enforced at the DB layer. If you inspect the DB tables created by django model inheritance, you'll see this isn't possible for the DB to accomplish.

Take a look at that related question for some alternative solutions.


What you are missing is abstract = True in the base class. This creates a table with all the fields for the subclass.

0

精彩评论

暂无评论...
验证码 换一张
取 消