Я посмотрел документацию и установил модуль в соответствии с инструкциями [https://pypi.org/project/django-composite-foreignkey/][1], но я изо всех сил пытаюсь реализовать это, если следующее верно, я получаю ошибку "get () вернул больше, чем Один образец - вернул 217! Очевидно, что мультиключ работает только с одним столбцом. Я предполагаю, что проблема в том, что post = get_object_or_404(Samples, pk=pk)
возвращает только одну переменную, а не список / словарь? Любая помощь очень ценится, так как мне нужно подготовить ее для нашей археологической экспедиции, пока я здесь в поле.
My view.py
def editsample(request, pk):
post = get_object_or_404(Samples, pk=pk)
if request.method == "POST":
form = SamplesForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('allsamples')
else:
form = SamplesForm(instance=post)
return render(request, 'samples/create_samples.html', {'form': form})
My model.py:
class Container(models.Model):
#columns for composite fkey
area_easting = models.IntegerField()
area_northing = models.IntegerField()
context_number = models.IntegerField()
sample_number = models.IntegerField()
container_name = models.CharField(max_length=50, blank=True, null=True)
container_type = models.CharField(max_length=50, blank=True, null=True)
#foreign keys
location_id = models.ForeignKey(Location, db_column='location_id', on_delete = models.PROTECT)
icon_desc = models.ForeignKey(Icon, db_column='icon_desc', on_delete = models.PROTECT)
def __str__(self):
return self.container_name
class Meta():
managed=False
db_table = 'samples\".\"container'
unique_together = [('area_easting', 'area_northing', 'context_number', 'sample_number'),]
class Samples(models.Model):
#Composite Key
area_easting = models.IntegerField()
area_northing = models.IntegerField()
context_number = models.IntegerField()
sample_number = models.AutoField(primary_key=True)
#other columns
material = models.CharField(max_length=25)
...
#VirtualField
#necs = CompositeOneToOneField(
nesc = CompositeForeignKey(
Container,
on_delete=DO_NOTHING,
#related_name='containers',
related_name='samples',
to_fields={
"area_easting": "area_easting",
"area_northing": "area_northing",
"context_number": "context_number",
"sample_number": "sample_number" })
def __int__(self):
return self.sample_number
class Meta:
db_table = 'samples\".\"samples'
managed = False
unique_together = (('area_easting', 'area_northing', 'context_number', 'sample_number'),)