Реализация составного внешнего ключа с 4 столбцами - PullRequest
0 голосов
/ 28 июня 2018

Я посмотрел документацию и установил модуль в соответствии с инструкциями [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'),)
...