0

I have built a model with a uuid as the primary key. When I try to update using the uuid to identify the entry I am getting a valuetype error which says the object_id needs to be an integer.

My Model:

class IPHold(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    CHOICES = [
        ('1', 'Book'),
        ('2', 'Documentary'),
        ('3', 'Graphic Novel/Comic'),
        ('4', 'Journalism'),
        ('5', 'Merchandise'),
        ('6', 'Podcast'),
        ('7', 'Stage Play/Musical'),
        ('8', 'Video Game'),
    ]
    media_type = models.CharField(max_length=1, choices=CHOICES, blank=False)
    title = models.CharField(max_length=255, blank=False)
    author_creator = models.CharField(max_length=255, blank=True)
    production_company = models.CharField(max_length=255, blank=True)
    artist = models.CharField(max_length=255, blank=True)
    composer = models.CharField(max_length=255, blank=True)
    publisher = models.CharField(max_length=255, blank=True)
    producer = models.CharField(max_length=255, blank=True)
    director = models.CharField(max_length=255, blank=True)
    year_published = models.ForeignKey(YearHold, on_delete=models.CASCADE, related_name='year_published', blank=True)
    # published_through = models.ForeignKey(YearHold, on_delete=models.CASCADE, related_name='published_through', default='0')
    ip_image = ResizedImageField(blank=True, size=[360, 360], force_format='JPEG', upload_to='media/ips/%Y/%m/')
    logline = models.TextField(blank=True)
    summary_description = models.TextField(blank=True)
    BOOKS = [
        ('1', '1'),
        ('2', '2'),
        ('3', '3'),
        ('4', '4'),
        ('5', '5'),
        ('6', '6'),
        ('7', '7'),
        ('8', '8'),
        ('9', '9'),
        ('10', '10+'),
    ]
    series_length = models.CharField(max_length=2, choices=BOOKS, blank=True)
    episodes = models.PositiveSmallIntegerField(default=0)
    other_formats = models.BooleanField(default=False)
    genres = TaggableManager(through=TaggedGenreHold, verbose_name='Genres', blank=True)
    tags = TaggableManager(through=TaggedTagHold, verbose_name='Tags', blank=True)
    AVCHOICES = [
        ('1', 'Available'),
        ('2', 'Optioned'),
        ('3', 'Purchased'),
        ('4', 'Public Domain'),
    ]
    availability = models.CharField(max_length=1, choices=AVCHOICES, blank=True)
    minimum_option_price = models.PositiveIntegerField(default=0)
    BUDGET = [
        ('0', 'Unknown'),
        ('1', '$'),
        ('2', '$$'),
        ('3', '$$$'),
        ('4', '$$$$'),
    ]
    projected_budget = models.CharField(max_length=1, choices=BUDGET, blank=True)
    LENGTH = [
        ('1', '1 month'),
        ('2', '3 months'),
        ('3', '6 months'),
        ('4', '12 months'),
        ('5', '18 months'),
        ('6', '2 years'),
        ('7', '5 years'),
    ]
    maximum_option_length = models.CharField(max_length=1, choices=LENGTH, blank=True)
    additional_terms = models.TextField(blank=True)
    attempts_to_adapt = models.TextField(blank=True)
    comparable_films = TaggableManager(through=TaggedFilmHold, verbose_name='Comparable Films', blank=True)
    awards = TaggableManager(through=TaggedAwardHold, verbose_name='Awards', blank=True)
    settings = TaggableManager(through=TaggedSettingHold, verbose_name='Settings', blank=True)
    goodreads_link = models.URLField(max_length=200, blank=True)
    amazon_link = models.URLField(max_length=200, blank=True)
    bookmarks_link = models.URLField(max_length=200, blank=True)
    bookstore_link = models.URLField(max_length=200, blank=True)
    apple_link = models.URLField(max_length=200, blank=True)
    spotify_link = models.URLField(max_length=200, blank=True)
    story_link = models.URLField(max_length=200, blank=True)
    purchase_link = models.URLField(max_length=200, blank=True)
    publication_link = models.URLField(max_length=200, blank=True)
    ticket_link = models.URLField(max_length=200, blank=True)
    streaming_link = models.URLField(max_length=200, blank=True)
    pitch_file = models.FileField(upload_to='media/pdf/%Y/%m/', blank=True)
    added_by = models.ForeignKey(get_user_model(), default=None, on_delete=models.CASCADE)
    created_date = models.DateTimeField(default=timezone.now)

My View:

def add_plot(request):
    id = request.GET.get('id')
    ips = IPHold.objects.get(id=id)
    form = forms.AddIPPlotForm
    if ips.media_type == '1':
        form = forms.AddBookPlotForm
    ip = get_ip(ips)
    context = {
        'ip':ip,
        'form':form,
    }
    if request.method == 'POST':
        form = form(request.POST)
        if form.is_valid():
            logline = request.POST.get('logline')
            summary_description = request.POST.get('summary_description')
            series_length = request.POST.get('series_length')
            if not series_length:
                series_length = ''
            ips.logline = logline
            ips.summary_description = summary_description
            ips.series_length = series_length
            form.save(commit=False)
            form.instance.id = id
            ips.save()
            form.save_m2m()

            return redirect('/iphold/add_option/?id=' + str(ips.id))
        else:
            return render(request, 'iphold/add_plot.html', context)

    return render(request, 'iphold/add_plot.html', context)

The error I get is Field 'object_id' expected a number but got . It seems to be happening at the form.save_m2m(). How do I get a uuid into my form without getting this error?

0 Answers0