简体   繁体   中英

Django model unique_together on primary key and unique constraints

I have a model given below.

class mc(models.Model):
    ap=models.CharField(max_length=50,primary_key=True)
    de=models.CharField(max_length=50)
    STATUS=models.CharField(max_length=12,default='Y')
    class Meta:
        unique_together=(("ap","de"),)
        db_table='mc'

I have written ap='1', de='2' to table mc.

+----+----+--------+
| ap | de | STATUS |
+----+----+--------+
| 1  | 2  | Y      |
+----+----+--------+

Then i have tried to write ap='1' and de='3' but its just overwritten the previous one. Now the table contains

+----+----+--------+
| ap | de | STATUS |
+----+----+--------+
| 1  | 3  | Y      |
+----+----+--------+

Then i tried to write ap='2',de='3' and its work. Since i have given unique_together, the compination of ap and de is not working.

But unique_together work if i haven't used 'primary_key' or 'unique' constraints on either of ap or de.

Will you please help me.? How to use unique_together on primary keys?

Actual problem is that ,i have another class mc1 which use a foreign key to the field ap.

class mc1(models.Model):                                                                                            

    test=models.ForeignKey(mc,on_delete=models.CASCADE,to_field='ap')

So mc.ap should be unique to define a foreignkey.

Django does not support multiple-column primary keys. It has been a feature request for several years. Each model must have one primary key .

In your case, if ap is the primary key, then each value in ap must be unique. It is not possible to store both (ap=1, de=2) and (ap=1, de=3) .

Perhaps you could add another field as the primary key. Then you will be able to have unique_together for ('ap', 'de') .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM