Коммерческий проект cs50w : IntegrityError UNIQUE constraint failed

Я работаю над проектом коммерции cs50w, пытаюсь создать новое объявление, но постоянно получаю эту ошибку:

IntegrityError at /new
UNIQUE constraint failed: auctions_listings.user_id

Вот мои модели для пользователя и листинга:


class User(AbstractUser):
    pass
    #def __str__(self):
        #return f"{self.username}"

class Listings(models.Model):
    title = models.CharField(max_length=30)
    desc = models.TextField()
    #starting_bid = models.FloatField(validators = [MinValueValidator(1)])
    img = models.URLField(blank=True)
    category = models.CharField(blank=True,max_length=20)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="owner", primary_key=True)

Вот мой взгляд на новое объявление:


def new(request):
    if request.method == "POST":
        
        if not request.user.is_authenticated:
            return render(request, "auctions/new_listing.html", {
                "message": "Try logging in first"
            })
        user = request.user

######################################################
        for u in User.objects.all():
            print(f" UID  = =  {u.pk} | Name = = {u}")
######################################################

        title = request.POST["title"]
        img = request.POST["image"]
        category = request.POST["category"]
        #starting_bid = request.POST["starting_bid"]
        description = request.POST["description"]

        listing = Listings.objects.create(
            user = user,
            title = title,
            img = img,
            category = category, 
            #starting_bid = starting_bid,
            desc = description
        )

        if listing is not None:
            listing.save()

        return redirect("index")

    return render(request, "auctions/new_listing.html")

И форма для создания нового объявления:

<form action="{% url 'new' %}" method="post" class="form-horizontal" style="width: 50%; margin: auto;">
    {% csrf_token %}

    <div class="form-group">
        <label for="title">Title: </label>
        <input type="text" name="title" id="title" class="form-control" autofocus required>
    </div>
    
    <div class="form-group">
        <label for="image">Image URL: </label>
        <input type="url" name="image" class="form-control" id="image" autofocus>
    </div>

    <div class="form-group">
        <label for="exampleFormControlSelect1">Category: </label>
        <select class="form-control" id="exampleFormControlSelect1" name="category">

            <option>clothing</option>
            <option>electronics</option>
            <option>collectables</option>
            <option>appliances</option>
            <option>furniture</option>
            <option>other</option>
            
        </select>
    </div>
    
    <!--
    <div class="form-group">
        <label for="starting_bid">Starting Bid: </label>
        <input type="number" id="starting_bid" name="starting_bid" class="form-control" autofocus>
    </div>
    -->
    
    <div class="form-group">
        <label for="description">Description: </label>

        <textarea class="form-control" id="description" name="description" rows="6" autofocus required>
        </textarea>
    </div>

    <div class="form-group">
        <input type="submit">
    </div>


</form>

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

Я уже выполнил python manage.py makemigrations и python manage.py migrate.

Эта ошибка происходит с каждым из моих 4 пользователей, все с автоматически увеличивающимся идентификатором.

Я могу распечатать пользователей и их идентификаторы просто отлично.

Я также получаю это предупреждение:

auctions.Listings.user: (fields.W342) Setting unique=True on 
a ForeignKey has the same effect as using a OneToOneField.   
        HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.

Но я все еще получаю ту же ошибку при использовании поля "один к одному" или поля "много к одному". В конечном итоге я хотел бы, чтобы у каждого пользователя было много объявлений, но сейчас я просто пытаюсь добиться успешного создания хотя бы одного объявления.

Это не нужно:

if not request.user.is_authenticated:
            return render(request, "auctions/new_listing.html", {
                "message": "Try logging in first"
            })

В этом также может быть проблема. Попробуйте следующее:

@login_required

РЕДАКТИРОВАТЬ: Я думаю, что проблема здесь. Вы установили в качестве первичного ключа внешний ключ. Вы должны стереть это "primary_key=True" и django создаст его сам.

Вернуться на верх