Множественный первичный ключ при миграции | Модели Django

#django

#джанго #django

Вопрос:

Даже я создал только один первичный ключ.Я не знаю, почему при переносе изменений отображается ошибка как множественный первичный ключ.

 
class Userinfo(models.Model):
    ''' User info ''' 
    user_name = models.CharField(max_length=30, unique=True, null=False,primary_key=True)
    full_name = models.CharField(max_length=50, null=False)
    user_email = models.EmailField(max_length=254,primary_key=False)
    college_name = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    profile_img = models.ImageField(upload_to=upload_rename, blank=True)
  

Миграции

 from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('userinfo', '0012_delete_authdetails'),
    ]

    operations = [
        migrations.AlterField(
            model_name='userinfo',
            name='user_name',
            field=models.CharField(max_length=30, primary_key=True, serialize=False, unique=True),
        ),
        migrations.RemoveField(
            model_name='userinfo',
            name='id',
        )

    ]

  

Может кто — нибудь помочь с этим ??

Комментарии:

1. Каково текущее определение? Вы получаете ошибку с помощью makemigrations или migrate ? Если последнее, можете ли вы также опубликовать сценарий миграции, который makemigrations создает.

2. я добавил сценарий миграции

3. Я думаю, вам, вероятно, придется сделать это более чем за один шаг, возможно, даже отредактировать файлы миграции. В качестве альтернативы вы можете сбросить все существующие данные в json / yaml с помощью dumpdata , воссоздать свою таблицу с новой ключевой структурой и снова загрузить данные с помощью loaddata . Последнее, вероятно, проще, и я не уверен, что первое вообще возможно…

4. Я нашел этот старый пост об изменении pks… вы могли бы попробовать этот подход, но он старый — не вижу ничего, что не работало бы в Django 2 или 3… blog.hexack.fr/en/change-the-primary-key-of-a-django-model.html

Ответ №1:

Попробуйте это :

 class Userinfo(models.Model):
    ''' User info ''' 
    user_name = models.CharField(max_length=30, unique=True, null=False,primary_key=True)
    full_name = models.CharField(max_length=50, null=False)
    user_email = models.EmailField(max_length=254)
    college_name = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    profile_img = models.ImageField(upload_to=upload_rename, blank=True)  

Комментарии:

1. Я что-то упускаю? Я не вижу никаких различий между этим и исходным кодом???

2. произошло изменение в поле электронной почты, где я назначал первичный ключ как false, потому что я думал, что возможно, что поле электронной почты было первичным ключом по умолчанию