简体   繁体   中英

Django pivot table without id and primary key

On the database i have 3 tables:

  1. languages
  2. cities
  3. city_language

city_language Table:

+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| city_id     | bigint(20) unsigned | NO   | PRI | NULL    |       |
| language_id | bigint(20) unsigned | NO   | PRI | NULL    |       |
| name        | varchar(255)        | NO   |     | NULL    |       |
+-------------+---------------------+------+-----+---------+-------+

Model

class CityLanguage(models.Model):
    city = models.ForeignKey('Cities', models.DO_NOTHING)
    language = models.ForeignKey('Languages', models.DO_NOTHING)
    name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'city_language'
        unique_together = (('city', 'language'),)

Model doesn't have id field and primary key also my table doesn't have id column. If i run this code i got error:

(1054, "Unknown column 'city_language.id' in 'field list'")

If i define primary key for a column this column values should unique. If i use primary_key when i want to put same city with different languages i get

With this city (name or language it depends on which column choose for primary key) already exists.

I don't want to create id column for pivot table. There is no reason create id column for pivot table. Please can you tell me how can i use pivot table with correct way. Thank you.

Django without primary_key not work. There is two way to figure out it:

  • Create id (Then Django model you don't need to add primary key)
  • Create other unique column and set it primary key, and also made it unique.

On my side i choose second way created a column named: unique_key and in model put the code.

unique_key = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

you need to import uuid.

Good luck.

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