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?